﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BookLibrary;
using System.Data;

namespace Web_Sven
{
    public partial class _Default : System.Web.UI.Page
    {
        private Database Database = Database.Instance;
        private String SelectedKlaslijst;
        private int SelectedRowInKlaslijstData = -1;
        private MyDataSet.BookRow Row;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                if (!chbCategorie.Checked)
                {
                    cmbCategorie.Enabled = false;
                }

                if (!chbUitgever.Checked)
                {
                    cmbUitgever.Enabled = false;
                }

                object[] Categorieen = new object[Database.Instance.categorieTable.Rows.Count];
                for (int i = 0; i < Categorieen.Length; i++)
                {
                    Categorieen[i] = Database.Instance.categorieTable.Rows[i].ItemArray[1];
                }
                cmbCategorie.DataSource = Categorieen;
                cmbCategorie.DataBind();

                object[] Uitgevers = new object[Database.uitgeverTable.Rows.Count];
                for (int i = 0; i < Uitgevers.Length; i++)
                {
                    Uitgevers[i] = Database.uitgeverTable.Rows[i].ItemArray[1];
                }
                cmbUitgever.DataSource = Uitgevers;
                cmbUitgever.DataBind();

                //plaats alle klaslijsten in een array
                object[] Klassen = new object[Database.klaslijstTable.Rows.Count];
                for (int i = 0; i < Klassen.Length; i++)
                {
                    Klassen[i] = Database.klaslijstTable.Rows[i].ItemArray[0];
                }
                //gebruik de klaslijsten als datasource voor de dropdown
                KlasLijst.DataSource = Klassen;
                KlasLijst.DataBind();

                KlasLijstVoorKopie.DataSource = Klassen;
                KlasLijstVoorKopie.DataBind();

                ZetFilter();
                ToonKlasBoeken();
            }
        }

        private void ZetFilter()
        {
            MaakBoekDetailsLeeg();
            var Resultaten = from book in Database.bookTable
                          join cat in Database.categorieTable on book.CategorieId equals cat.Id
                          join uit in Database.uitgeverTable on book.UitgeverId equals uit.Id
                          where (txtTitel.Text == "" || book.Titel.Contains(txtTitel.Text.ToUpper())) && (txtIsbn.Text == "" || book.Isbn.Contains(txtIsbn.Text)) && ((!chbCategorie.Checked) || cmbCategorie.SelectedItem.ToString().Equals(cat.Description)) && ((!chbUitgever.Checked) || cmbUitgever.SelectedItem.ToString().Equals(uit.Description))
                          select book;
            DataTable Temp = new DataTable();
            if (Resultaten.ToArray().Length != 0)
            {
                //Strip overbodige kolommen
                Temp = Resultaten.CopyToDataTable();
                Temp.Columns.Remove("Isbn");
                Temp.Columns.Remove("Status");
                Temp.Columns.Remove("CategorieId");
                Temp.Columns.Remove("UitgeverId");
            }

            dgvAllBooks.DataSource = Temp;
            dgvAllBooks.DataBind();
        }

        private void MaakBoekDetailsLeeg()
        {
            Row = null;
            BoekDetails.InnerText = "";
        }

        protected void txtTitel_TextChanged(object sender, EventArgs e)
        {
            ZetFilter();
        }

        protected void txtIsbn_TextChanged(object sender, EventArgs e)
        {
            ZetFilter();
        }

        protected void chbCategorie_CheckedChanged(object sender, EventArgs e)
        {
            if (chbCategorie.Checked)
            {
                cmbCategorie.Enabled = true;
            }
            else
            {
                cmbCategorie.Enabled = false;
            }
        }

        protected void chbUitgever_CheckedChanged(object sender, EventArgs e)
        {
            if (chbUitgever.Checked)
            {
                cmbUitgever.Enabled = true;
            }
            else
            {
                cmbUitgever.Enabled = false;
            }
        }

        protected void cmbCategorie_SelectedIndexChanged(object sender, EventArgs e)
        {
            ZetFilter();
        }

        protected void cmbUitgever_SelectedIndexChanged(object sender, EventArgs e)
        {
            ZetFilter();
        }

        protected override void Render(HtmlTextWriter writer)
        {
            foreach (GridViewRow Rij in dgvAllBooks.Rows)
            {
                if (Rij.RowType == DataControlRowType.DataRow)
                {
                    Rij.Attributes["onmouseover"] = "this.style.fontWeight='bold'";
                    Rij.Attributes["onmouseout"] = "this.style.fontWeight='normal'";
                    // Set the last parameter to True
                    // to register for event validation.
                    Rij.Attributes["onclick"] = ClientScript.GetPostBackClientHyperlink(dgvAllBooks, "Select$" + Rij.DataItemIndex, true);
                }
            }

            foreach (GridViewRow Rij in KlasBoeken.Rows)
            {
                if (Rij.RowType == DataControlRowType.DataRow)
                {
                    Rij.Attributes["onmouseover"] = "this.style.fontWeight='bold'";
                    Rij.Attributes["onmouseout"] = "this.style.fontWeight='normal'";
                    Rij.Attributes["onclick"] = ClientScript.GetPostBackClientHyperlink(KlasBoeken, "Select$" + Rij.DataItemIndex, true);
                }
            }
            base.Render(writer);
        }

        protected void KlasLijst_SelectedIndexChanged(object sender, EventArgs e)
        {
            ToonKlasBoeken();
        }

        private void ToonKlasBoeken()
        {
            SelectedKlaslijst = KlasLijst.SelectedValue.ToString();
            //Laad de klaslijst
            var Query = from klas in Database.klaslijstTable
                        join boeken in Database.klas_bookTable on klas.Id equals boeken.KlaslijstId
                        join boek in Database.bookTable on boeken.BookId equals boek.Isbn
                        where klas.Id.Equals(SelectedKlaslijst)
                        select boek;
            DataTable Temp = new DataTable();
            if (Query.ToArray().Length != 0)
            {
                Temp = Query.CopyToDataTable();
                Temp.Columns.Remove("Status");
            }
            KlasBoeken.DataSource = Temp;
            KlasBoeken.DataBind();
        }

        protected void naarLijst_Click(object sender, EventArgs e)
        {
            SelectedKlaslijst = KlasLijst.SelectedValue.ToString();
            dgvAllBooks_SelectedIndexChanged(sender, e);
            if (Row != null && SelectedKlaslijst != null)
            {
                MyDataSet.Klaslijst_BookRow BoekRij;
                BoekRij = (MyDataSet.Klaslijst_BookRow)Database.klas_bookTable.NewRow();
                BoekRij.BeginEdit();
                BoekRij.KlaslijstId = SelectedKlaslijst;
                BoekRij.BookId = Row.Isbn;
                BoekRij.EndEdit();
                try
                {
                    Database.klas_bookTable.AddKlaslijst_BookRow(BoekRij);
                }
                catch (Exception)
                {
                    //TODO Exception
                }
                KlasLijst_SelectedIndexChanged(null, null);
            }
        }

        protected void uitLijst_Click(object sender, EventArgs e)
        {
            if (SelectedRowInKlaslijstData > -1)
            {
                String isbn = KlasBoeken.Rows[SelectedRowInKlaslijstData].Cells[1].Text.ToString();
                var detail = from book in Database.bookTable
                             where book.Isbn.Equals(isbn)
                             select book;
                MyDataSet.BookRow Row = detail.First();
                KlasBoeken.DeleteRow(SelectedRowInKlaslijstData);
                SelectedRowInKlaslijstData = -1;
                Database.klas_bookAdapt.Delete(KlasLijst.SelectedItem.ToString(), detail.First().Isbn);
                Database.UpdateClassList();
            }
        }

        protected void wisLijst_Click(object sender, EventArgs e)
        {
            int RowCount = KlasBoeken.Columns.Count - 2;
            while (RowCount > 0)
            {
                RowCount--;
                String ISBN = KlasBoeken.Rows[RowCount].Cells[1].Text.ToString();
                Database.klas_bookAdapt.Delete(KlasLijst.SelectedItem.ToString(), ISBN);
                KlasBoeken.DeleteRow(RowCount);
            }
            Database.UpdateClassList();
        }

        protected void annuleer_Click(object sender, EventArgs e)
        {
            Database.Annuleer();
        }

        protected void overschrijf_Click(object sender, EventArgs e)
        {

        }

        protected void voegToe_Click(object sender, EventArgs e)
        {
            Database.PersistKlasLijst();
        }

        protected void dgvAllBooks_SelectedIndexChanged(object sender, EventArgs e)
        {
            int Rij = dgvAllBooks.SelectedRow.RowIndex;

            if (Rij > -1)
            {
                var DetailQuery = from book in Database.bookTable
                             where book.Titel.Equals(dgvAllBooks.Rows[Rij].Cells[0].Text.ToString())
                             select book;
                if (DetailQuery.Count() != 0)
                {
                    Row = DetailQuery.First();
                    String Details = "<p>Titel: " + Row.Titel +
                        "<br />ISBN: " + Row.Isbn +
                        "<br />Uitgever: " + Row.UitgeverId + " Categorie: " + Row.CategorieId +
                        "<br />Prijs: " + Row.Prijs + "</p>";
                    BoekDetails.InnerHtml = Details;
                }
            }
        }

        protected void klasLijstData_SelectedIndexChanged(object sender, EventArgs e)
        {
            int rij = KlasBoeken.SelectedRow.RowIndex;
            if (rij > -1)
            {
                var DetailQuery = from book in Database.bookTable
                             where book.Titel.Equals(KlasBoeken.Rows[rij].Cells[0].Text.ToString())
                             select book;
                if (DetailQuery.Count() != 0)
                {
                    Row = DetailQuery.First();
                    String Details = "<p>Titel: " + Row.Titel +
                        "<br />ISBN: " + Row.Isbn +
                        "<br />Uitgever: " + Row.UitgeverId + " Categorie: " + Row.CategorieId +
                        "<br />Prijs: " + Row.Prijs + "</p>";
                    KlasBoekDetails.InnerHtml = Details;
                }
            }
        }



    }
}
